<?php
/* CATEGORY.INC.PHP by martin $ 2009/11/24 22:03:57
*/

checkADMIN();

$ini_file = OD.'category.ini.php';

$header = $body = '';

$helperState = isset($_COOKIE['PPBLOG_HELPER_STATE']) ? $_COOKIE['PPBLOG_HELPER_STATE'] : 1;

if(is_file($ini_file)) include($ini_file);

$num_cat = count($CATEGORY_LIST);

/* 実行 */

if(p_('new_name') != ''){ # カテゴリー名の変更実行
 $newName = p_('new_name');
 $newLink = p_('new_link');
 $notalnum = preg_grep('/[\xe0-\xef][\x80-\xbf]{2}/x', $newLink);
 if(!empty($notalnum)){
  refresh_page('admin.php?mode=section&sub=cat_edit', 2300);
  return $DIVISION['body'] .= '<p class="alert" style="margin-top: 150px;"><span>リンク名に非英数字が使われているようです。<strong>'.$notalnum[0].'</strong>とか。</span></p>';
 }
 if(is_array($newName)){
  foreach ($newName as $i=>$name){
   list($oName,) = explode("\t", $CATEGORY_LIST[$i]);
   $isSub = strpos($oName, ',') ? TRUE : FALSE;
   if($isSub) list(,$oName) = explode(',', $oName);
   if($oName != $name){
    $hits = preg_grep("{^$name\t}", $CATEGORY_LIST);
    if(!empty($hits)){
     $hit = array_shift($hits); list($hit, ) = explode("\t", $hit);
     refresh_page('admin.php?mode=section&sub=cat_edit', 2000);
     return $DIVISION['body'] .= '<p class="alert" style="margin-top: 150px;"><span>カテゴリー名の重複があるようです。<strong>'.$hit.'</strong>とか。</span></p>';
    }
    if(strpos($oName.'|', $name.'|')) continue;
   }
  }
 }

 if(is_array($newLink)){
  $_newLink = array_map('strtolower', $newLink);
  $__newLink = array_unique($_newLink);
  if($_newLink != $__newLink){
   refresh_page('admin.php?mode=section&sub=cat_edit', 3000);
   return $DIVISION['body'] .= '
    <p class="alert" style="margin-top: 150px;"><span>リンク名が他のリンク名と重複しているようです。英数字の大文字小文字は区別されません</span></p>';
  }
 } #newLink
 $_CATEGORY_LIST = $CATEGORY_LIST;
 foreach ($newLink as $i => $new){
  list($oName, $oLink) = explode("\t", $CATEGORY_LIST[$i]); list($oLink,) = explode('|', $oLink, 2);
  $isSub = strpos($oName, ',') ? TRUE : FALSE;
  if($isSub){
   list($main, $oName) = explode(',', $oName); list(, $oLink) = explode('/', $oLink);
   $CATEGORY_LIST[$i] = str_replace(array(",$oName\t", "/$oLink|"), array(",$newName[$i]\t", "/$newLink[$i]|"), $CATEGORY_LIST[$i]);
  } else {
   $CATEGORY_LIST[$i] = str_replace(array("$oName\t", "\t$oLink|"), array("$newName[$i]\t", "\t$newLink[$i]|"), $CATEGORY_LIST[$i]);
   $CATEGORY_LIST = str_replace(array("$oName,", "\t$oLink/"), array("$newName[$i],", "\t$newLink[$i]/"),  $CATEGORY_LIST);
  }
 }
 rewrite_ini($ini_file, $CATEGORY_LIST);
 include ($ini_file);
 foreach ($_CATEGORY_LIST as $i => $line){
  list($before, $link) = explode("\t", $line); list($after,) = explode("\t", $CATEGORY_LIST[$i]);
  if($before != $after) replace_category_name($before, $after);
  if($_CATEGORY_LIST != $CATEGORY_LIST) $mod = TRUE;
 }
 update_cache(array('category'));
 if(isset($mod)) showMessage('変更のあったカテゴリー名・リンク名を修正しました');
 else showMessage('カテゴリー名に変更はないようです');
}

if(p_('cat_rotate') != ''){ # カテゴリーの順序の設定実行
 $CATEGORY_LIST = array(); # init
 $categories = explode("\t\t", p_('cat_rotate', 2));
 foreach ($categories as $c){
  if(trim($c)=='') continue;
  $CATEGORY_LIST[] = $c;
 }
 rewrite_ini($ini_file, $CATEGORY_LIST);
 update_cache(array('category'));
 showMessage('カテゴリー順序を変更しました');
}

if(p_('delcat') != ''){ # カテゴリー削除の実行
 $MISC_EXISTS = FALSE;
 foreach ($CATEGORY_LIST as $i=>$C){
  if($C==p_('delcat', 0)) break;
 }
 $CS = explode('|', $C); list($target,) = explode("\t", $CS[0], 2);
 if($target == MISC){
  foreach ($CATEGORY_LIST as $i=>$line){
   if(strstr($line, MISC."\t")){
    foreach ($LOGS as $log){
     $fp = @fopen($log, "r");
     if($fp){
      while (!feof($fp)){
       $line = fgets($fp, 4096);
       if(strpos($line, '|'.MISC.'|')){ $MISC_EXISTS = TRUE; break 3;}
      }
      fclose($fp);
     }
    }#foreach
   }
  }#foreach
 }
 if($MISC_EXISTS){
  refresh_page('admin.php?mode=section&sub=cat_delete', 2500);
   return $DIVISION['body'] .= 
   '<p class="alert" style="margin-top: 150px;"><span>「'.MISC.'」を指定している記事があるので削除することは出来ません</span></p>';
 }
 if(strstr($target, ',')){ # サブであれば
  array_splice($CATEGORY_LIST, $i, 1); # ヒットしたカテを削除
  list($main, $sub) = explode(',', $target);
  foreach ($CATEGORY_LIST as $j=>$C){
   if(strstr($C, "$main\t")) break;
  }
  $_CATEGORY_LIST = array_values($CATEGORY_LIST);
  list(, $N,) = explode('|', $C, 3);
  $_CATEGORY_LIST[$j] = "$main\t".trans_cat($main).'|'.((int)$N - 1); # 1つ減じる
  $CATEGORY_LIST = preg_replace("{($main,.+?\|)$N(.*$)}", '${1}'.((int)$N - 1).'${2}', $_CATEGORY_LIST);
  replace_category_name($target, $main); # サブの場合はメインに組み込み
 } else { # メインであれば
  if(!strstr($C, '|0')){
   refresh_page('admin.php?mode=section&sub=cat_delete', 2500);
   return $DIVISION['body'] .= 
   '<p class="alert" style="margin-top: 150px;"><span>サブカテゴリーのあるカテゴリーを先に削除することは出来ません</span></p>';
  } else {
   array_splice($CATEGORY_LIST, $i, 1); # ヒットしたカテを削除
   replace_category_name($target, MISC);
  }
 }
 if(p_('del_icon')==1){
  if(isset($CS[2])) unlink(PATH.$CS[2]);
 }
 rewrite_ini($ini_file, $CATEGORY_LIST);
 update_cache(array('category'));
 showMessage('選んだカテゴリーを削除しました');
 refresh_page('admin.php?mode=section&sub=cat_delete');
}

if(isset($_POST['new_category'])){ # カテゴリー追加の実行
 $newCategory = str_replace("\t", ' ', p_('new_category', 0));
 if($newCategory==''){
  refresh_page('admin.php?mode=section&sub=add_cat');
  return $DIVISION['body'] .= '<p class="alert-p"><span>カテゴリー名が空白です</span></p>';
 }
 foreach ($CATEGORY_LIST as $i=>$C){
  if(strstr($C, "$newCategory\t")){
   refresh_page('admin.php?mode=section&sub=add_cat', 1500);
   return $DIVISION['body'] .= '<p class="alert-p"><span>カテゴリー名が重複してます</span></p>';
  }
 }
 $CATEGORY_LIST[] = "$newCategory\t".url_encode($newCategory).'|0';
 rewrite_ini($ini_file, $CATEGORY_LIST);
 update_cache(array('category'));
 showMessage('新しくカテゴリーを追加しました');
}

if(isset($_POST['new_subcategory'])){ # サブカテゴリー追加の実行
 $newSubCategory = str_replace("\t", ' ', p_('new_subcategory', 0));
 $cat_index = p_('cat_index');
 
 foreach($CATEGORY_LIST as $i=>$C){
  if($cat_index==$i){
   list($main, $no) = explode('|', $C); list($_main, $mainlink) = explode("\t", $main);
   if($main==$newSubCategory){
    refresh_page('admin.php?mode=section&sub=add_subcat', 2000);
    return $DIVISION['body'] .= '<p class="alert-p"><span>親カテゴリーと名前が重複してます。確認して下さい。</span></p>';
    break;
   }
   $newmain = $main.'|'.($no+1);
   for ($j=$i+1; $j <= $i+$no; $j++){
    if(strpos($CATEGORY_LIST[$j], ',')){ // subcat
     if(preg_match('{.*?,([^\|]*?)\t.+?\|\d+$}', $CATEGORY_LIST[$j], $mt)){ # no icon
      $newSubCat[] = $_main.','.trim($mt[1])."\t".$mainlink.'/'.url_encode(trim($mt[1])).'|'.($no+1);
     } else {
      if(preg_match('{.+?,([^\|]+?)\t.+?\|\d+?\|(.+?$)}', $CATEGORY_LIST[$j], $mt)){ # icon is set
       $newSubCat[] = $_main.','.trim($mt[1])."\t".$mainlink.'/'.url_encode(trim($mt[1])).'|'.($no+1).'|'.trim($mt[2]);
      }
     }
    }
   }
   $newSubCat[] = $_main.','.$newSubCategory."\t".$mainlink.'/'.url_encode($newSubCategory).'|'.($no+1);
   array_splice($CATEGORY_LIST, $i, 0, $newmain);
   array_splice($CATEGORY_LIST, $i+1, $no+1, $newSubCat);
   break;
  }
 } # foreach

 rewrite_ini($ini_file, $CATEGORY_LIST);
 update_cache(array('category'));
 showMessage('新しくサブカテゴリーを追加しました');
}

if(isset($_FILES['new_icon_img']['tmp_name']) && p_('PathDetach')!='on'){ # アイコン追加
 $tmp = $_FILES['new_icon_img']['tmp_name'];
 $sz = getimagesize($tmp);
 $imgExt = array(1=>'.gif',2=>'.jpg',3=>'.png',4=>'.swf',5=>'.psd',6=>'.bmp');
 if($path=p_('new_icon_path')!=''){
  $img_path = p_('new_icon_path');
  $dir_name = dirname($img_path);
  $img_name = basename($img_path);
  if(!is_writable(PATH.$dir_name)){ // is re-writable ?
   $dir_name = 'smiley';
   $img_name = basename($_FILES['new_icon_img']['name']);
   $img_path = preg_match('{^[0-9a-z\.\-]+$}i', $img_name) ? $dir_name.'/'.$img_name : $dir_name.'/cat_icon'.time().$imgExt[$sz[2]];
  }

  if(strstr($img_name, $imgExt[$sz[2]])){echo "$img_name|".$imgExt[$sz[2]];
   $img_path = preg_match('{^[0-9a-z\.\-]+$}i', $img_name) ? $dir_name.'/'.$img_name : $dir_name.'/cat_icon'.time().$imgExt[$sz[2]];
  } else { # 拡張子が一致しない
   $img_name = explode('.', $img_name);
   $img_path = preg_match('{^[0-9a-z\.\-]+$}i', $img_name[0]) ?
    $dir_name.'/'.$img_name[0].$imgExt[$sz[2]] : $dir_name.'/cat_icon'.time().$imgExt[$sz[2]];
  }
 } else {
  $dir_name = 'smiley';
  $img_name = basename($_FILES['new_icon_img']['name']);
  $img_path = preg_match('{^[0-9a-z\.\-]+$}i', $img_name) ? $dir_name.'/'.$img_name : $dir_name.'/cat_icon'.time().$imgExt[$sz[2]];
 }
 if(is_file(PATH.$img_path)) unlink(PATH.$img_path);
 if(move_uploaded_file($_FILES['new_icon_img']['tmp_name'], PATH.$img_path)){
  $target = p_('cat_list', 0);
  $DIVISION['body'] .= '<p class="alert" style="margin-top: 150px;"><span>画像アイコンのアップロードに成功しました</span></p>';
 }
 foreach($CATEGORY_LIST as $i=>$C){
  if($target==$C){
   list($cat, $no,) = explode('|', $C);
   $CATEGORY_LIST[$i] = "$cat|$no|$img_path|$sz[0]|$sz[1]";
   break;
  }
 }
 rewrite_ini($ini_file, $CATEGORY_LIST);
 refresh_page("admin.php?mode=section&sub=add_icon", 1500);
 return $DIVISION['body'] .= '<p class="alert-p">自動的に更新します</p>';
}

if(p_('PathDetach')=='on'){ # アイコン登録解除
 $target = p_('cat_list', 0);
 foreach($CATEGORY_LIST as $i=>$C){
  if($target==$C){
   list($cat, $no, $path) = explode('|', $C);
   @unlink(PATH.$path);
   $CATEGORY_LIST[$i] = "$cat|$no";
   break;
  }
 }
 rewrite_ini($ini_file, $CATEGORY_LIST);
 refresh_page("admin.php?mode=section&sub=add_icon", 1500);
 $DIVISION['body'] .= '<p class="alert" style="margin-top: 150px;"><span>画像アイコンの登録を解除しました</span></p>';
 return $DIVISION['body'] .= '<p class="alert-p">自動的に更新します</p>';
}

## 実行ここまで

$header .= '
<style type="text/css">
form {  margin-top: 1.5em; }
</style>
';
if(v_('sub')=='rotate'){ # カテゴリーの順序変更
 $body .= '
<form action="admin.php" method="post" style="width: 560px;">
 <fieldset>
  <legend>カテゴリーの順序変更</legend>
  <div class="hidden">
   <input type="hidden" name="mode" value="section" />
   <input type="hidden" name="sub" value="rotate" />
   <input type="text" name="cat_rotate" id="cat_rotate" value="" />
  </div>
  <ul class="p2em">
   <li>順序の変更は，まず移動させたいカテゴリー名を選択して，その状態で上下させます</li>
   <li>設定の保存は下の更新ボタンを押して下さい。その順序が反映されます</li>
  </ul>
 ';
 $body .=<<<__HTML
  <script type="text/javascript">/*<![CDATA[*/
var cat_length = $num_cat;

function UpDownList(dir){
 var tindex, subnum = 0;
 var opt, ob = d.getElementById("catList");
 var _dir = dir < 0 ? -1 : 1;
 var index = ob.selectedIndex;
 if(index < 0){ alert("まずカテゴリーを選択して下さい。"); return;}
 if(index==0 && dir < 0) return;
 if(index==ob.options.length-1 && dir > 0) return;
 if(ob.options[index].id.match(/_sub$/) && !ob.options[index+dir].id.match(/_sub$/)) return;
 
 if(ob.options[index].id.match(/cat[0-9]+_[1-9]+/)){ // もしサブカテがあるなら
  subnum = ob.options[index].id.split('_').pop();
 }
 if(_dir < 0){
  while(!ob.options[index].id.match(/_sub$/) && ob.options[index+dir].id.match(/_sub$/)){
   dir--;
  }
 } else {
  if(parseInt(index) + parseInt(dir) >= eval(cat_length-subnum)) return;
  while(ob.options[parseInt(index)+parseInt(dir)+parseInt(subnum)+1] &&
   ob.options[parseInt(index)+parseInt(dir)+parseInt(subnum)+1].id.match(/_sub$/)){
   dir++;
  }
 }
 tindex = (parseInt(index)+parseInt(dir));
 opt = d.createElement("option");
 opt.value = ob.options[index].value;
 opt.text = ob.options[index].text;
 opt.id = ob.options[index].id;
 ob.removeChild(ob.options[index]);
 if(subnum > 0){
  subs = [];
  for (var i=0; i < subnum; i++){
   subs[i] = d.createElement("option");
   subs[i].value = ob.options[index].value;
   subs[i].text = ob.options[index].text;
   subs[i].id = ob.options[index].id;
   ob.removeChild(ob.options[index]);
  }
 }
 if(client.MSIE){
  if(subnum > 0){
   for (var i=subs.length; i>0; i--){
    ob.add(subs[i-1], tindex);
   }
  }
  ob.add(opt, tindex);
 } else {
  if(subnum > 0){
   for (var i=subs.length; i>0; i--){
    ob.insertBefore(subs[i-1], ob.options[tindex]);
   }
  }
  ob.insertBefore(opt, ob.options[tindex]);
 }
 ob.options[tindex].selected = true;
}

function _submit(){
 var catlist = d.getElementById("catList");
 for (var i=0; i < catlist.options.length; i++){
  d.getElementById("cat_rotate").value += (catlist.options[i].value+"\t\t");
 }
}
/*]]>*/</script>
  <table style="width:240px;margin: auto;">
   <colgroup><col style="width:210px;" /><col style="width:30px;vertical-align:middle;" /></colgroup>
   <tr>
    <td>
  <select size="$num_cat" name="cat_list" id="catList" style="width:200px;">

__HTML;
 $_CATEGORY_LIST = preg_replace('{([^\t]+)\t[^|]+\|(\d+).*$}', '\\1|\\2', $CATEGORY_LIST);
 foreach ($_CATEGORY_LIST as $i=>$_cat){
  list($_cat, $no) = explode('|', $_cat);
  if(strstr($_cat,',')){
   list($main,$sub) = explode(',', $_cat);
  } else {
   $main = $_cat; $sub = '';
  }
  $__cat = !empty($sub) ? $sub : $main;
  $_sb = !empty($sub) ? ' &nbsp;&nbsp;┗ ' : '';
  $body .= ' <option value="'.$CATEGORY_LIST[$i].'" id="cat'.$i.(!empty($sub)?'_sub':'_'.$no).'">'.$_sb.$__cat.'</option>'.NL;
 }
 $body .= '</select>
  </td>
  <td>
  <img src="Images/upward1.png" onclick="UpDownList(-1);" alt="Up"
   onmouseover="this.src=\'Images/upward2.png\'" title="上に移動"
   onmouseout="this.src=\'Images/upward1.png\'" /><br />
  <img src="Images/downward1.png" onclick="UpDownList(1);" alt="Down"
   onmouseover="this.src=\'Images/downward2.png\'" title="下に移動"
   onmouseout="this.src=\'Images/downward1.png\'" />
  </td>
 </tr>
 <tr class="center">
  <td colspan="2">
   <input type="image" src="Images/reload1.png" onclick="_submit();return true;"
    onmouseover="this.src=\'Images/reload2.png\';"
    onmouseout="this.src=\'Images/reload1.png\'" alt="Refresh" title="更 新" />
  </td>
 </tr>
 </table>
 </fieldset>
 </form>'.NL;
 return $DIVISION['body'] .= $header.$body;
}

if(v_('sub')=='cat_edit'){ # カテゴリー名の変更
 $body .= '
<form action="admin.php" method="post" style="width: 540px;max-width: 540px;">
 <fieldset>
  <legend>カテゴリー名の変更</legend>
  <div class="hidden">
   <input type="hidden" name="mode" value="section" />
   <input type="hidden" name="sub" value="cat_edit" />
  </div>
  <ul class="p2em">
   <li>カテゴリー名を変更します。一度に複数の変更が可能です</li>
   <li>リンク名はブラウザのアドレスバーに表示される文字のことです。使える文字は基本的に英数字とアンダースコアやハイフンのみです。日本語のカテゴリー名の場合、初期ではそのままエンコードされた文字になっているので、適宜わかりやすい英数字に置き換えると良いと思います。
   <p class="exp">「日 記」は '.url_encode('日 記').' となるので、これを「<strong>diary</strong>」に変えるとか.</p>
   </li>
   <li>ここで「'.MISC.'」の名称は変更できません。これは「環境設定」→「その他」で変更可能です。「'.MISC.'」のリンク名は変えることが出来ます。</li>
   <li>設定の保存は下の更新ボタンを押して下さい</li>
  </ul>
  <table style="margin:auto;width:90%;">
  <tr><th><p class="tinyheader" style="letter-spacing:2pt;">現在のカテゴリー</p></th><th><p class="tinyheader">リンク名</p></th></tr>
 ';
  foreach ($CATEGORY_LIST as $i=>$line){
   list($_cat, $no,) = explode('|', $line);
   list($cat,) = explode("\t", $line, 2);
   if(strstr($_cat,',')){
    list($main,$sub) = explode(',', $_cat);
   } else {
    $main = $_cat; $sub = '';
   }
   $catlink = '';
   if(empty($sub)){
    if(strpos($main, "\t")){
     list($main, $catlink) = explode("\t", $main);
    } else $catlink = !empty($catlink) ? $catlink : url_encode($main);
   } else {
    if(strpos($sub, "\t")){
     list($sub, $catlink) = explode("\t", $sub);
     list(, $catlink) = explode('/', $catlink);
    } else $catlink = !empty($catlink) ? $catlink : url_encode($sub);
   }
   $__cat = !empty($sub) ? $sub : $main;
   $_sb = !empty($sub) ? ' &nbsp;&nbsp;┗ ' : '';
   $body .= '
   <tr>
    <td>'.$_sb.($__cat == MISC ? '<input type="hidden" name="new_name[]" value="'.$__cat.'" />' : '').'<input type="text" name="new_name[]" value="'.$__cat.'" size="'.(!empty($sub)?'12':'20').'"'.($__cat == MISC ? ' disabled="disabled"' : '').' /></td>
    <td><input type="text" name="new_link[]" value="'.$catlink.'" size="10" /></td>
   </tr>
   ';
  }
  $body .= '
   <tr class="center">
    <td>
     <input type="image" src="Images/reload1.png"
     onmouseover="this.src=\'Images/reload2.png\';"
     onmouseout="this.src=\'Images/reload1.png\'" alt="Refresh" title="更 新" />
    </td>
   </tr>
  </table>
  </fieldset>
 </form>
 ';
 return $DIVISION['body'] .= $header.$body;
}

if(v_('sub')=='cat_delete'){ # カテゴリーの削除
 $body = '
<form action="admin.php" method="post" style="width: 540px;max-width: 540px;">
 <fieldset>
  <legend>カテゴリーの削除</legend>
  <div class="hidden">
   <input type="hidden" name="mode" value="section" />
   <input type="hidden" name="sub" value="cat_delete" />
  </div>
  <ul class="p2em">
   <li>カテゴリー名を選択して削除ボタンでカテゴリー名が削除されます</li>
   <li>サブカテゴリーを含むカテゴリーは削除できません。サブカテを先に削除して下さい</li>
   <li>削除されたメインカテゴリーの記事は「'.MISC.'」に移り，削除されたサブカテゴリーの記事はメインカテゴリーに移ります</li>
  </ul>
  <div class="center">
  <select size="'.$num_cat.'" name="delcat" id="delcat" style="width: 300px;">
 ';
 foreach ($CATEGORY_LIST as $i=>$line){
  $cs = explode('|', $line);
  list($_cat,) = explode("\t", $cs[0]); $no = $cs[1];
  $cat_icon = isset($cs[2]) ? $cs[2] : '';
  if(strpos($_cat, ',')){
   list($main, $sub) = explode(',', $_cat);
  } else {
   $main = $_cat; $sub = '';
  }
  $__cat = !empty($sub) ? $sub : $main;
  $_sb = !empty($sub) ? ' &nbsp;&nbsp;┗ ' : '';
  $body .= ' <option value="'.$line.'" id="cat'.$i.(!empty($sub)?'_sub':'_'.$no).'">'.$_sb.$__cat.($cat_icon!=''?'　[アイコンあり]':'').'</option>'.NL;
 }
 $body .= '</select>
 <div style="margin: 0 auto 1em 0; padding: 1em 0;">
 <script type="text/javascript">/*<![CDATA[*/
  checkSelected = function(){
   var del = o(\'#delcat\').$;
   if(del && typeof del.options[del.selectedIndex] != "object"){
    alert("まず削除したいカテゴリーを選択してください。");
    return false;
   } else {
    var tar = del.options[del.selectedIndex].id.split("_")[1];
    if(parseInt(tar) != NaN && tar > 0){
     alert(\'子カテゴリー持ちなので、先に削除することは出来ません。\'); return false;
    }
    return my_confirm(\'このカテゴリーを\');
   }
  }
 /*]]>*/</script>
 <p><input type="checkbox" name="del_icon" value="1" id="del_icon" /><label for="del_icon"> 削除対象のアイコンも一緒に削除する</label></p>
 <p style="margin-top: 1em;"><input type="image" src="Images/delete1.png"
    onclick="return checkSelected();"
    onmouseover="this.src=\'Images/delete2.png\';"
    onmouseout="this.src=\'Images/delete1.png\'" alt="Delete" title="削 除" />
 </p></div>
 </div>
 </fieldset>
</form>
 ';
 return $DIVISION['body'] .= $header.$body;
}

if(v_('sub')=='add_cat'){ # カテゴリーの追加
 $body .= '
<form action="admin.php" method="post" class="center" style="width: 540px;max-width: 540px;">
 <fieldset style="padding-bottom: 1em;">
  <legend>カテゴリー名の追加</legend>
  <input type="hidden" name="mode" value="section" />
  <input type="hidden" name="sub" value="add_cat" />
  <p style="margin: 1em;padding-top: 2em;">新しいカテゴリーの追加 <img src="Images/dlmark.png" alt="&gt;" />
   <input type="text" name="new_category" class="text" size="10" value="" />
  <input type="image" src="Images/add2_1.png" title="追 加"
    style="vertical-align: middle;"
    onmouseover="this.src=\'Images/add2_2.png\';"
    onmouseout="this.src=\'Images/add2_1.png\'" alt="Add" />
  </p>
  <div style="width: 450px; margin: 2em auto;">
   <span class="result" style="cursor:pointer;"
    onclick="var c=d.getElementById(\'cat-entry\');c.style.display=(c.style.display==\'none\'?\'block\':\'none\');"
    title="クリックでon/off切り替え">[登録されているカテゴリー一覧]</span>
   <div id="cat-entry" class="corner-play"
    style="width: 240px; color: #555555; text-align: left; margin: 1em auto; padding: .5em 2em .5em 2em;">
 ';
 $_CATEGORY_LIST = preg_replace('{([^\t]+)\t.+$}', '\\1', $CATEGORY_LIST);
 foreach ($_CATEGORY_LIST as $i=>$cat){
  if(strpos($cat, ',')){
   list($main, $sub) = explode(',', $cat);
  } else {
   $main = $cat; $sub = '';
  }
  $_cat = !empty($sub) ? $sub : $main;
  $_sq = !empty($sub) ? '□ ' : '■ ';
  $_sb = !empty($sub) ? ' &nbsp;&nbsp;┗ ' : '';
  $body .= $_sq.$_sb.$_cat.'<br />'.NL;
 }
  $body .= '
   </div>
  </div>
 </fieldset>
</form>
 ';
 return $DIVISION['body'] .= $header.$body;
}

if(v_('sub')=='add_subcat'){ # サブカテゴリーの追加
 $body .= '
<form action="admin.php" method="post" class="center" style="width: 550px;max-width: 550px;">
 <fieldset style="padding-bottom:15px;">
 <legend>サブカテゴリー名の追加</legend>
 <input type="hidden" name="mode" value="section" />
 <input type="hidden" name="sub" value="add_subcat" />
 <p style="margin: 1em;padding-top: 2em;">カテゴリー名の後の数字は，サブカテゴリーの数を表しています。</p>
 ';
 $body .= '<p><select name="cat_index" id="cat_index" onchange="document.getElementById(\'newsub\').focus();">'.NL;
 foreach ($CATEGORY_LIST as $i => $l){
  $ls = explode('|', $l); list($_ls, ) = explode("\t", $ls[0]);
  if(strpos($_ls, ',')) continue;
  $c = trim($_ls);
  $no = $ls[1][0];
  $body .= '<option value="'.$i.'">'.$c.' ['.$no.']</option>'.NL;
 }
 $body .= '
  </select>
  <img src="Images/dlmark.png" alt="&gt;" />
   <input id="newsub" type="text" name="new_subcategory" class="text" size="10" value="" />
  <input type="image" src="Images/add2_1.png" title="追 加"
    style="vertical-align: middle;"
    onmouseover="this.src=\'Images/add2_2.png\';"
    onmouseout="this.src=\'Images/add2_1.png\'" alt="Add" />
  </p>
  <div style="width: 450px; margin: 2em auto;">
   <span class="result" title="クリックでon/off切り替え" style="cursor:pointer;"
   onclick="var c=d.getElementById(\'cat-entry\');c.style.display=(c.style.display==\'none\'?\'block\':\'none\');">
   [登録されているカテゴリー一覧]</span>
   <div id="cat-entry" class="tinyheader"
    style="width: 240px; color: #555555; text-align: left; padding: .5em 2em .5em 2em;">
 ';
 $_CATEGORY_LIST = preg_replace('{([^\t]+)\t.+$}', '\\1', $CATEGORY_LIST);
 foreach ($_CATEGORY_LIST as $i=>$cat){
  if(strpos($cat, ',')){
   list($main, $sub) = explode(',', $cat);
  } else {
   $main = $cat; $sub = '';
  }
  $_cat = !empty($sub) ? $sub : $main;
  $_sq = !empty($sub) ? '□ ' : '■ ';
  $_sb = !empty($sub) ? ' &nbsp;&nbsp;┗ ' : '';
  $body .= $_sq.$_sb.$_cat.'<br />'.NL;
 }
  $body .= '
   </div>
  </div>
 </fieldset>
 </form>
 ';
 return $DIVISION['body'] .= $header.$body;
}

if(v_('sub')=='add_icon'){ # カテゴリーアイコンの追加
 $body = '
 <form id="mform" method="post" action="admin.php?mode=section" enctype="multipart/form-data" style="width: 90%;">
 <fieldset><legend>新しいカテゴリーアイコンの追加</legend>
  <div class="hidden">
   <input type="hidden" name="mode" value="section" />
   <input type="hidden" name="sub" value="add_icon" />
  </div>
  <ol class="p2em" style="margin: 0.7em 2em -1em 2em; display:'.($helperState?'block':'none').';">
   <li>まず、アイコンを追加したいカテゴリを選択して下さい。既にアイコンが登録されているカテゴリを選択すると上書きされます。</li>
   <li>次に、アイコン画像までのパスを例にならって記入して下さい。空白なら最上位の<strong>smiley</strong>ディレクトリにアップされます。</li>
   <li>アイコン画像のファイル名は英数字のみです。日本語は不可です（例えば 日記.jpg はNG）</li>
   <li>画像の名前まで指定すればそのまま反映されますし、パスが空白だったり取得不可であればこちらで適宜名前を付けます。</li>
   <li>アイコン画像を保存する場所は、書き込み可能なディレクトリであればどこでも構いません。</li>
   <li>「<strong>削除</strong>」にチェックを入れて更新すると、選択したカテゴリーのアイコン登録は解除されます(<strong>アイコン画像も削除されます</strong>)。</li>
  </ol><p class="helper" onclick="toggleHelper(this);" title="説明を閉じる">　</p>
  <script type="text/javascript">/*<![CDATA[*/
  checkSelected = function(){
   var catL = o("#catList");
   if(typeof catL.$.options[catL.$.selectedIndex] != "object"){
    alert("アイコンを追加したいカテゴリーを選択してください。");
    return false;
   } else if(o("#newIconImg").$.value=="" && d.forms[1].PathDetach.checked != true){
    alert("アップする画像を指定して下さい");
    return false;
   }
  }
  setPass = function(ob){
   var txt = ""+ob.options[ob.selectedIndex].text;
   if(txt.match(/.+?\[ .+? \]/i)){
    o("#newIconPath").$.value = txt.replace(/^.+?\[ /,"").replace(/ \]/,"");
   } else o("#newIconPath").$.value = "";
  }
  /*]]>*/</script>
  <p style="text-align: center; width: 300px; margin: 1em auto 0 auto; color: tomato;">例）theme/chic/Images/css-icon.png</p>
  <table style="width:auto; margin: auto;">
   <tr>
    <td>カテゴリ</td>
    <td ><select size="'.$num_cat.'" name="cat_list" id="catList" style="width:24em;"
    onchange="setPass(this);">
 ';
 foreach ($CATEGORY_LIST as $i=>$line){
  $CS = explode('|', $line);
  $icon = isset($CS[2]) ? '&nbsp;&nbsp;[ '.$CS[2].' ]' : '';
  list($cat, ) = explode("\t", $CS[0]);
  if(strstr($cat, ',')){
   list($main,$sub) = explode(',', $cat);
  } else {
   $main = $cat; $sub = '';
  }
  $__cat = !empty($sub) ? $sub : $main;
  $_sb = !empty($sub) ? ' &nbsp;&nbsp;┗ ' : '';
  $body .= ' <option value="'.$line.'" id="cat'.$i.(!empty($sub)?'_sub':'_'.$CS[1]).'">'.$_sb.$__cat.$icon.'</option>'.NL;
 }
 $body .= '</select></td>
   </tr>
   <tr>
    <td class="rt">パ ス</td>
    <td class="lt"><input type="text" name="new_icon_path" id="newIconPath" value="" size="12" style="width:24em;" /></td>
   </tr>
   <tr>
    <td class="rt">画像ファイル</td>
    <td class="lt">
     <input type="file" name="new_icon_img" id="newIconImg" size="16" />
     <label for="PathDetach"> 削 除 <input type="checkbox" name="PathDetach" id="PathDetach" /></label>
    </td>
   </tr>
   <tr class="center">
   <td colspan="2">
    <input type="image" src="Images/add1.png"
     onclick="return checkSelected();"
     onmouseover="this.src=\'Images/add2.png\';"
     onmouseout="this.src=\'Images/add1.png\'" alt="Add" title="追 加" />
   </td>
   </tr>
  </table>
  
 ';
 
 $body .= '<div style="width: 90%; margin: 1em auto;">
  <h3 class="corner-play tinyheader" style="width: 210px; color: #667;">ア イ コ ン 登 録 状 況</h3>
  <table style="width: 90%; margin: 0 auto 1em auto; border: solid 1px #333;">
   <tr class="header"><th>（サブ）カテゴリー名</th><th>画像までのパス</th><th>アイコン</th></tr>
 ';
 $i = 0;
 foreach ($CATEGORY_LIST as $cat){
  $CS = explode('|', $cat);
  list($cat,) = explode("\t", $CS[0]);
  if(isset($CS[2])){
   $i++;
   $body .= '<tr style="background: '.($i%2==0?'#efecfa':'#fff').';"><td>'.str_replace(',',' &gt;&gt; ',$cat).'</td><td>'.$CS[2].'</td><td><img src="'.$CS[2].'" alt="category icon" /></td></tr>'.NL;
  }
 }
 $body .= '</table>
 </div>
 </fieldset>
 </form>'.NL;
 return $DIVISION['body'] .= $header.$body;
}

function replace_category_name($before, $after){ // カテゴリー名を変えたら，ログのカテゴリー記録も修正
 global $LOGS;
 foreach ($LOGS as $log){
  $lines = file($log); $mod = FALSE;
  foreach($lines as $i => $line){
   list($uid, $cat, $rest) = explode('|', $line, 3);
   if($cat == $before){
    $mod = TRUE;
    $lines[$i] = "$uid|$after|$rest";
   }
  }
  if($mod) rewrite($log, $lines);
  unset($lines);
 }
}
?>
